home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / src / lib / include / dev / pfs.h < prev    next >
C/C++ Source or Header  |  1989-08-24  |  6KB  |  153 lines

  1. /*
  2.  * pfs.h --
  3.  *
  4.  *    Declarations of the kernel/user-level-server interface for
  5.  *    pseudo-file-systems. The pseudo-file-system interface uses
  6.  *    the request-response protocol defined for pseudo-devices
  7.  *    to forward file system naming operations to the pseudo-file-system
  8.  *    server process.
  9.  *
  10.  *    A more complete explaination of pseudo-file-systems should be in
  11.  *    the man page (/sprite/doc/ref/devices/pfs), and the pseudo-device
  12.  *    interface document is (/sprite/doc/ref/devices/pdev).
  13.  *
  14.  *    The kernel-to-server interface is based on a set of typed messages,
  15.  *    one for each operation implemented by the server.  Each message
  16.  *    has a header of type Pfs_Request, which in turn embeds some
  17.  *    operation-specific parameters.  Following the parameters is a variable
  18.  *    length block of data, generally a pathname.  Most of the parameters
  19.  *    are kernel structures defined in fsNameOps.h.
  20.  *    
  21.  * Copyright 1989 Regents of the University of California
  22.  * All rights reserved.
  23.  * Permission to use, copy, modify, and distribute this
  24.  * software and its documentation for any purpose and without
  25.  * fee is hereby granted, provided that the above copyright
  26.  * notice appear in all copies.  The University of California
  27.  * makes no representations about the suitability of this
  28.  * software for any purpose.  It is provided "as is" without
  29.  * express or implied warranty.
  30.  *
  31.  *
  32.  * $Header: /sprite/src/lib/include/dev/RCS/pfs.h,v 1.6 89/08/24 15:54:03 mendel Exp $ SPRITE (Berkeley)
  33.  */
  34.  
  35. #ifndef _PFS
  36. #define _PFS
  37.  
  38. #include "dev/pdev.h"
  39.  
  40. #ifdef KERNEL
  41. #include "fsNameOps.h"
  42. #else
  43. #include <kernel/fsNameOps.h>
  44. #endif
  45.  
  46. /*
  47.  * Pseudo-filesystem pathname operations
  48.  *    PFS_OPEN        Open a file in the pseudo-filesystem.
  49.  *    PFS_GET_ATTR        Get attributes given a pathname in a pfs.
  50.  *    PFS_SET_ATTR        Set attributes given a pathname in a pfs.
  51.  *    PFS_MAKE_DEVICE        Make a device
  52.  *    PFS_MAKE_DIR        Make a directory
  53.  *    PFS_REMOVE        Remove a file
  54.  *    PFS_REMOVE_DIR        Remove a directory
  55.  *    PFS_RENAME        Rename a file
  56.  *    PFS_HARD_LINK        Make a hard link between two files.
  57.  *    PFS_DOMAIN_INFO        Return information about the pseudo-file-system
  58.  */
  59.  
  60. #define PFS_OPEN        10
  61. #define PFS_GET_ATTR        11
  62. #define PFS_SET_ATTR        12
  63. #define PFS_MAKE_DEVICE        13
  64. #define PFS_MAKE_DIR        14
  65. #define PFS_REMOVE        15
  66. #define PFS_REMOVE_DIR        16
  67. #define PFS_RENAME        17
  68. #define PFS_HARD_LINK        18
  69. #define PFS_SYM_LINK        19
  70. #define PFS_DOMAIN_INFO        20
  71.  
  72. /*
  73.  * When a naming operation is done in a pseudo-filesystem the pfs server
  74.  * gets a message of the following format.  Data, usually a single pathname,
  75.  * follows this message/parameter block.  The results of most of these
  76.  * operations is only an error status and there are no associated typedefs.
  77.  * Exceptions are GET_ATTR, which returns a Fs_GetAttributes struct,
  78.  * OPEN, and DOMAIN_INFO.  See IOC_PFS_OPEN or IOC_PFS_PASS_STREAM for an
  79.  * explaination of how opens are handled.  The DOMAIN_INFO operation takes
  80.  * the fileID that is the handle on the top-level directory (prefix) of
  81.  * the domain and the return value is a Fs_DomainInfo struct.
  82.  */
  83.  
  84. typedef struct {
  85.     Pdev_RequestHdr    hdr;    /* with PFS_REQUEST_MAGIC */
  86.     union {            /* Additional parameters to the operation. */
  87.     Fs_OpenArgs        open;
  88.     Fs_OpenArgs        getAttr;
  89.     Fs_OpenArgs        setAttr;
  90.     Fs_MakeDeviceArgs    makeDevice;
  91.     Fs_OpenArgs        makeDir;
  92.     Fs_LookupArgs        remove;
  93.     Fs_LookupArgs        removeDir;
  94.     Fs_2PathParams        rename;
  95.     Fs_2PathParams        hardLink;
  96.     Fs_OpenArgs        symLink;
  97.     Fs_FileID        domainInfo;
  98.     } param;
  99. } Pfs_Request;
  100.  
  101. #define PFS_REQUEST_MAGIC    0x73657C6B
  102.  
  103. /*
  104.  * When a PFS_SET_ATTR operation is done the data that follows the message hdr
  105.  * has the following format.  The file name comes at the end and its true
  106.  * length is given in the nameLength field.
  107.  */
  108.  
  109. typedef struct {
  110.     Fs_Attributes    attr;        /* Attribute values */
  111.     int            flags;        /* Indicates which attributes to set */
  112.     int            nameLength;    /* Number of bytes in name */
  113.     char        name[4];    /* Actually larger */
  114. } Pfs_SetAttrData;
  115.  
  116. /*
  117.  * I/O Controls specific to pseudo-filesystem servers
  118.  *    IOC_PFS_OPEN        This is used instead of IOC_PDEV_REPLY to
  119.  *                respond to a PFS_OPEN request.  This reply
  120.  *                causes a new pseudo-device connection between
  121.  *                the server and the opening client.  The result
  122.  *                of this I/O control is a new streamID for
  123.  *                the server's half of the connection.  Unlike
  124.  *                pseudo-device servers, there is no need to
  125.  *                read a control stream to get this streamID,
  126.  *                it is returned as a result of this IOC.
  127.  *    IOC_PFS_SET_ID        This is used to set the file ID associated
  128.  *                with a connection to a pseudo-filesystem server.
  129.  *                There will be a naming connection, and perhaps
  130.  *                many more pdev-like connections that represent
  131.  *                files.  The ID set by this call we be passed in
  132.  *                as the 'prefixID' and 'rootID' fields of
  133.  *                the arguments to naming operations.  If this
  134.  *                call is not used then the kernel's own
  135.  *                fileIDs (which are unique, anyway) are used.
  136.  *    IOC_PFS_PASS_STREAM    This is used instead of IOC_PDEV_REPLY to
  137.  *                respond to a PFS_OPEN request.  This reply
  138.  *                passes the stream indicated by the input
  139.  *                streamID to the client as the result of its
  140.  *                open request.  Thus the pseudo-filesystem
  141.  *                server can open a file/device/whatever on
  142.  *                behalf of its client and return the open file.
  143.  *                The pseudo-filesystem server won't see any
  144.  *                more I/O operations, or the close.
  145.  */
  146.  
  147. #define IOC_PFS            (6 << 16)
  148. #define IOC_PFS_OPEN        (IOC_PFS | 0x1)
  149. #define IOC_PFS_SET_ID        (IOC_PFS | 0x2)
  150. #define IOC_PFS_PASS_STREAM    (IOC_PFS | 0x3)
  151.  
  152. #endif _PFS
  153.